package convert

import (
	"errors"
	"math"
	"strconv"
)

// Int16ToInt 将 int16 转换为 int，由于 int16 的范围完全包含在 int 中，所以直接转换即可。
func Int16ToInt(value int16) (int, error) {
	return int(value), nil
}

// Int16ToInt8 将 int16 转换为 int8，需要检查是否超出 int8 的范围。
func Int16ToInt8(value int16) (int8, error) {
	if value < math.MinInt8 || value > math.MaxInt8 {
		return 0, errors.New("overflow occurred during conversion")
	}
	return int8(value), nil
}

// Int16ToInt32 将 int16 转换为 int32，由于 int16 的范围完全包含在 int32 中，所以直接转换即可。
func Int16ToInt32(value int16) (int32, error) {
	return int32(value), nil
}

// Int16ToInt64 将 int16 转换为 int64，由于 int16 的范围完全包含在 int64 中，所以直接转换即可。
func Int16ToInt64(value int16) (int64, error) {
	return int64(value), nil
}

// Int16ToUint 将 int16 转换为 uint。
func Int16ToUint(value int16) (uint, error) {
	if value < 0 {
		return 0, errors.New("negative value cannot be converted to uint")
	}
	return uint(value), nil
}

// Int16ToUint8 将 int16 转换为 uint8，需要检查是否超出 uint8 的范围。
func Int16ToUint8(value int16) (uint8, error) {
	if value < 0 {
		return 0, errors.New("negative value cannot be converted to uint8")
	}
	if value > math.MaxUint8 {
		return 0, errors.New("overflow occurred during conversion")
	}
	return uint8(value), nil
}

// Int16ToUint16 将 int16 转换为 uint16。
func Int16ToUint16(value int16) (uint16, error) {
	if value < 0 {
		return 0, errors.New("negative value cannot be converted to uint16")
	}
	return uint16(value), nil
}

// Int16ToUint32 将 int16 转换为 uint32。
func Int16ToUint32(value int16) (uint32, error) {
	if value < 0 {
		return 0, errors.New("negative value cannot be converted to uint32")
	}
	return uint32(value), nil
}

// Int16ToUint64 将 int16 转换为 uint64，由于 uint64 是无符号类型，不需要检查负数。
func Int16ToUint64(value int16) (uint64, error) {
	if value < 0 {
		return 0, errors.New("negative value cannot be converted to uint64")
	}
	return uint64(value), nil
}

// Int16ToFloat32 将 int16 转换为 float32，直接转换即可。
func Int16ToFloat32(value int16) (float32, error) {
	return float32(value), nil
}

// Int16ToFloat64 将 int16 转换为 float64，直接转换即可。
func Int16ToFloat64(value int16) (float64, error) {
	return float64(value), nil
}

// Int16ToString 将 int16 转换为 string，使用 strconv.Itoa 函数进行转换。
func Int16ToString(value int16) string {
	return strconv.Itoa(int(value))
}

// Int16ToBool 将 int16 转换为 bool，非零值转换为 true，零值转换为 false。
func Int16ToBool(value int16) bool {
	return value != 0
}
